}
}
- if (!ostree_repo_list_objects (self, OSTREE_REPO_LIST_OBJECTS_ALL, &objects,
- cancellable, error))
+ if (!ostree_repo_list_objects (self, OSTREE_REPO_LIST_OBJECTS_ALL | OSTREE_REPO_LIST_OBJECTS_NO_PARENTS,
+ &objects, cancellable, error))
goto out;
if (!refs_only)
{
if (!list_loose_objects (self, ret_objects, NULL, cancellable, error))
goto out;
- if (self->parent_repo)
+ if ((flags & OSTREE_REPO_LIST_OBJECTS_NO_PARENTS) == 0 && self->parent_repo)
{
if (!list_loose_objects (self->parent_repo, ret_objects, NULL, cancellable, error))
goto out;
* @OSTREE_REPO_LIST_OBJECTS_LOOSE: List only loose (plain file) objects
* @OSTREE_REPO_LIST_OBJECTS_PACKED: List only packed (compacted into blobs) objects
* @OSTREE_REPO_LIST_OBJECTS_ALL: List all objects
+ * @OSTREE_REPO_LIST_OBJECTS_NO_PARENTS: Only list objects in this repo, not parents
*/
typedef enum {
OSTREE_REPO_LIST_OBJECTS_LOOSE = (1 << 0),
OSTREE_REPO_LIST_OBJECTS_PACKED = (1 << 1),
- OSTREE_REPO_LIST_OBJECTS_ALL = (1 << 2)
+ OSTREE_REPO_LIST_OBJECTS_ALL = (1 << 2),
+ OSTREE_REPO_LIST_OBJECTS_NO_PARENTS = (1 << 3),
} OstreeRepoListObjectsFlags;
/**
setup_fake_remote_repo1 "archive-z2"
-echo '1..2'
+echo '1..3'
cd ${test_tmpdir}
mkdir repo
${CMD_PREFIX} ostree --repo=repo prune
echo "ok prune with partial repo"
+
+assert_has_n_objects() {
+ find $1/objects -name '*.filez' | wc -l > object-count
+ assert_file_has_content object-count $2
+ rm object-count
+}
+
+cd ${test_tmpdir}
+for repo in repo child-repo tmp-repo; do
+ rm ${repo} -rf
+ ${CMD_PREFIX} ostree --repo=${repo} init --mode=archive
+done
+echo parent=${test_tmpdir}/repo >> child-repo/config
+mkdir files
+for x in $(seq 3); do
+ echo afile${x} > files/afile${x}
+done
+${CMD_PREFIX} ostree --repo=repo commit -b test files
+assert_has_n_objects repo 3
+# Inherit 1-3, add 4-6
+for x in $(seq 4 6); do
+ echo afile${x} > files/afile${x}
+done
+# Commit into a temp repo, then do a local pull, which triggers
+# the parent repo lookup for dedup
+${CMD_PREFIX} ostree --repo=tmp-repo commit -b childtest files
+${CMD_PREFIX} ostree --repo=child-repo pull-local tmp-repo childtest
+assert_has_n_objects child-repo 3
+# Sanity check prune doesn't do anything
+for repo in repo child-repo; do ${CMD_PREFIX} ostree --repo=${repo} prune; done
+# Now, leave orphaned objects in the parent only pointed to by the child
+${CMD_PREFIX} ostree --repo=repo refs --delete test
+${CMD_PREFIX} ostree --repo=child-repo prune --refs-only --depth=0
+assert_has_n_objects child-repo 3
+
+echo "ok prune with parent repo"